package whf.framework.security;

import java.util.Set;

import whf.framework.security.entity.Group;
import whf.framework.security.entity.Permission;
import whf.framework.security.entity.Role;
import whf.framework.security.entity.User;

/**
 * 基本的用户管理接口(主要是指用户的权限相关)
 * @author wanghaifeng
 *
 */
public interface UserManager {
	public final static String USER_MANAGER_SERVICE = "UserService";
	
	/**
	 * 通过用户名和密码找到用户
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param username
	 * @param password
	 * @return
	 */
	public User findUser(String username, String password);
	
	/**
	 * 搜索用户的所有角色
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param user
	 * @return
	 */
	public Set<Role> findRoles(User user);
	
	/**
	 * 搜索用户所拥有的权限
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param user
	 * @return
	 */
	public Set<Permission> findPermissions(User user);
	
	/**
	 * 搜索用户所属的用户组
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param user
	 * @return
	 */
	public Set<Group> findGroups(User user);
	
	/**
	 * 用户是否拥有权限
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param user
	 * @param perm
	 * @return
	 */
	public boolean hasPermission(User user, Permission perm);
	
	/**
	 * 用户是否可以执行一项动作(同上)
	 * @modify wanghaifeng Oct 16, 2006 8:59:36 AM
	 * @param user
	 * @param target
	 * @param operation
	 * @return
	 */
	public boolean canDo(User user, String target, String operation);
	
	/**
	 * 通过用户名搜索用户
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @param username
	 * @return
	 */
	public User findUserByUsername(String username);
	
//	public Set<Group> findAnonymousGroups();
	
	/**
	 * 搜索当前系统的匿名角色<br>
	 * 当角色的名字包含anonymous字符串时,该角色中的权限就是匿名角色所拥有的权限
	 * @modify wanghaifeng Oct 5, 2006 7:44:22 AM
	 * @return
	 */
	public Set<Role> findAnonymousRoles();
}
